/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package view.common;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import model.bean.NivelAcceso;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

/**
 * @Archivo Menu.java
 * @Fecha                @Autor   @Cambios
 * 21/01/2011 06:51:06 PM       jcamayo
 */
public class Menu {
    
    private static Logger logger = Logger.getLogger(Menu.class.getName());
    
    private List<MenuOpcion> menuList;
    
    public Menu(){
    }

    public List<MenuOpcion> getMenuList() {
        return menuList;
    }

    public void setMenuList(List<MenuOpcion> menuList) {
        this.menuList = menuList;
    }
    
    public void fillMenuList(List<NivelAcceso> optionlist) {
        List<MenuOpcion> list = new ArrayList<MenuOpcion>();
        fillMenu(null,optionlist, list);
        this.menuList = new ArrayList<MenuOpcion>();
        for(MenuOpcion opt:list){
            NivelAcceso vo = (NivelAcceso)opt.getChild();
            if( (StringUtils.isEmpty(vo.getOpcion().getAccion()) && opt.getChildCount()>0)
                 || (!StringUtils.isEmpty(vo.getOpcion().getAccion()))
                    ){
                this.menuList.add(opt);
            }
        }
    }
    
    public void paintMenu(){
        if(menuList!=null && menuList.size()>0){
            paintOption(menuList,0);
        }
        else{
            logger.info("Empty menuList");
        }
    }
    
    
    private void fillMenu(Integer parentId,List<NivelAcceso> menuOptionList, List<MenuOpcion> menuList){
        for(NivelAcceso vo :menuOptionList){
            if((vo.getOpcion().getPadreOpcion() == null && parentId==null)
                || (vo.getOpcion().getPadreOpcion()!=null && vo.getOpcion().getPadreOpcion().getId().equals(parentId))
                ){
                MenuOpcion opt = new MenuOpcion(vo);
                fillMenu(vo.getOpcion().getId(), menuOptionList, opt.getChildList());
                menuList.add(opt);
            }
        }
    }
    
    private void paintOption(List<MenuOpcion> menuList, int level){
        level = level + 1;
        for(MenuOpcion opt:menuList){
            NivelAcceso vo = (NivelAcceso)opt.getChild();
            //paint option
            logger.info("Level::"  + level + "::Option::" + vo.getOpcion().getId());
            if(opt.getChildCount()>0)
                paintOption(opt.getChildList(),level);
        }
    }

}
